package com.xu.cloud.common.process;

// import com.xu.cloud.common.pojo.http.req.BaseRequest;
// import com.xu.cloud.common.pojo.http.resp.BaseResponse;
// import org.aspectj.lang.ProceedingJoinPoint;
// import org.aspectj.lang.annotation.Around;
// import org.aspectj.lang.annotation.Aspect;
// import org.aspectj.lang.annotation.Pointcut;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.core.annotation.AnnotationAwareOrderComparator;
//
// import java.util.ArrayList;
// import java.util.List;
// import java.util.stream.Collectors;
//
// /**
//  * 业务执行aop拦截器(AspectJ实现)
//  *
//  * @author xuguan
//  * @since 2023/11/23
//  */
// @Aspect
// public class ProcessorAspect {
//
//     @Autowired(required = false)
//     private List<IHandler> handlers;
//
//     @Pointcut("execution(* com.xu.cloud.common.process.IProcessor.process(..))")
//     public void pointcut() {
//
//     }
//
//     @Around("pointcut()")
//     public Object around(ProceedingJoinPoint pjp) throws Throwable {
//         BaseRequest request = (BaseRequest) pjp.getArgs()[0];
//
//         final List<IHandler> realHandlers = getRealHandlers(request);
//         Exception e = null;
//         BaseResponse response = null;
//         try {
//             for (int i = 0; i < realHandlers.size(); i++) {
//                 realHandlers.get(i).preProcess(request);
//             }
//
//             response = (BaseResponse) pjp.proceed();
//
//             for (int i = realHandlers.size() - 1; i >= 0; i--) {
//                 realHandlers.get(i).postProcess(request, response);
//             }
//
//             return response;
//         } catch (Throwable th) {
//             if (th instanceof Exception) {
//                 e = (Exception) th;
//             }
//             throw th;
//         } finally {
//             for (int i = realHandlers.size() - 1; i >= 0; i--) {
//                 realHandlers.get(i).completeProcess(request, response, e);
//             }
//         }
//     }
//
//     private List<IHandler> getRealHandlers(BaseRequest request) {
//         // 无拦截器
//         if (handlers == null) {
//             return new ArrayList<>();
//         }
//         // 按照Order注解排序
//         AnnotationAwareOrderComparator.sort(handlers);
//         return handlers.stream()
//                 .filter(handler -> handler.needHandle(request))
//                 .collect(Collectors.toList());
//     }
// }
